void
gtk_snapshot_init (GtkSnapshot *snapshot,
GskRenderer *renderer,
- const cairo_region_t *clip)
+ const cairo_region_t *clip,
+ const char *name,
+ ...)
{
+ cairo_rectangle_int_t extents;
+
+ cairo_region_get_extents (clip, &extents);
+
snapshot->state = NULL;
- snapshot->root = NULL;
snapshot->renderer = renderer;
snapshot->clip_region = clip;
+ snapshot->root = gsk_renderer_create_render_node (renderer);
+ gsk_render_node_set_bounds (snapshot->root, &GRAPHENE_RECT_INIT (extents.x, extents.y, extents.width, extents.height));
+
+ if (name)
+ {
+ va_list args;
+ char *str;
+
+ va_start (args, name);
+ str = g_strdup_vprintf (name, args);
+ va_end (args);
+
+ gsk_render_node_set_name (snapshot->root, str);
+
+ g_free (str);
+ }
+
+ snapshot->state = gtk_snapshot_state_new (NULL, snapshot->root);
}
GskRenderNode *
gtk_snapshot_finish (GtkSnapshot *snapshot)
{
+ gtk_snapshot_pop (snapshot);
+
if (snapshot->state != NULL)
{
g_warning ("Too many gtk_snapshot_push() calls.");
gsk_render_node_append_child (snapshot->state->node, node);
gsk_render_node_set_transform (node, &snapshot->state->transform);
}
- else if (snapshot->root == NULL)
- {
- snapshot->root = gsk_render_node_ref (node);
- }
else
{
g_critical ("Tried appending a node to an already finished snapshot.");
void gtk_snapshot_init (GtkSnapshot *state,
GskRenderer *renderer,
- const cairo_region_t *clip);
+ const cairo_region_t *clip,
+ const char *name,
+ ...) G_GNUC_PRINTF (4, 5);
GskRenderNode * gtk_snapshot_finish (GtkSnapshot *state);
static inline const graphene_matrix_t *
widget->priv->clip.width,
widget->priv->clip.height});
fallback = gsk_renderer_create_fallback (renderer, &viewport, cr);
- gtk_snapshot_init (&snapshot, renderer, clip);
+ gtk_snapshot_init (&snapshot, renderer, clip, "Fallback<%s>", G_OBJECT_TYPE_NAME (widget));
gtk_widget_snapshot (widget, &snapshot);
node = gtk_snapshot_finish (&snapshot);
if (node != NULL)
gtk_snapshot_init (&snapshot,
renderer,
- gdk_drawing_context_get_clip (context));
+ gdk_drawing_context_get_clip (context),
+ "Render<%s>", G_OBJECT_TYPE_NAME (widget));
gtk_widget_snapshot (widget, &snapshot);
root = gtk_snapshot_finish (&snapshot);
if (root != NULL)